﻿namespace Framework.HTTP
{
    using System;
    using System.Net;

    public static class ValidateResponse
    {
        //метод опроса печатной формы входные параметры куки селениума и урл по которой находится печатная форма
        public static void ValidateFileDownload(OpenQA.Selenium.Cookie seleniumCookie, string urlPrint)
        {
            //создаем .Net куки из куков селениума
            var cookie = new Cookie(seleniumCookie.Name, seleniumCookie.Value, seleniumCookie.Path, seleniumCookie.Domain);
            //создаем запрос на урлу(создаем а не отправляем) 
            var httpWebRequest = (HttpWebRequest)WebRequest.Create(urlPrint);
            //создаем контейнер для кукув .Net
            httpWebRequest.CookieContainer = new CookieContainer();
            //добавлем нашу куки в контейнер
            httpWebRequest.CookieContainer.Add(cookie);
            //задаем тип запроса GET - получить POST - отправить
            httpWebRequest.Method = "GET";
            //задаем ...
            httpWebRequest.KeepAlive = false;
            //задаем ...
            httpWebRequest.ContentLength = 0;
            //получаем ответ на отправленный сечас настроеный запрос
            var response = httpWebRequest.GetResponse();
            //проверяем что response.ContentType - тип файла допустим application/vnd.ms-excel
            //StringAssert.Contains("application/vnd.ms-excel", response.ContentType, "Файл на скачивание формата:" + response.ContentType + " ожидался \"application/vnd.ms-excel\"");
        }

        //метод импорта из Web - Своды

        /*
        public static void HttpUploadFile(IWebDriver driver, string file, OpenQA.Selenium.Cookie seleniumCookie)
        {
            var fileName = System.IO.Path.GetFileName(file);
            const string url = "http://debi/WebDriver/File/Upload";
            var myWebClient = new CookieAwareWebClient(seleniumCookie);
            myWebClient.UploadFile(new Uri(url), file);
            var js = driver as IJavaScriptExecutor;
            System.Threading.Thread.Sleep(1000);
            var id = ExtJs3.TrySWebDriverFind(driver, By.CssSelector(".x-window.x-resizable-pinned")).GetAttribute("id");
            if (js != null)
            {
                js.ExecuteScript(
                    @"
                var cmp = Ext.getCmp(arguments[0]);
                cmp.uploader.value = arguments[1];
                cmp.doImport(null);",
                    id, fileName);
                //второй вариант выполнения импорта более кривой
                //RIA.Forms.Utils.getFormViewport().FormInstanceId;
                //FormActions.ImportForm(a,'Импорт данных из формата Барс.Web-Своды',null,'FORMHANDLER_30_03_2012_06_26_19.bxml',null);"
            }

            //return new MaskConfirm(driver);
        }
        */

        //перекрываем класс подкладываем куки
        private class CookieAwareWebClient : WebClient
        {
            private readonly CookieContainer _mContainer;

            public CookieAwareWebClient(OpenQA.Selenium.Cookie seleniumCookie)
            {
                _mContainer = new CookieContainer();
                var cookie = new Cookie(seleniumCookie.Name, seleniumCookie.Value, seleniumCookie.Path, seleniumCookie.Domain);
                _mContainer.Add(cookie);
            }

            protected override WebRequest GetWebRequest(Uri address)
            {
                var request = base.GetWebRequest(address);
                if (request is HttpWebRequest)
                {
                    (request as HttpWebRequest).CookieContainer = _mContainer;

                }
                return request;
            }
        }
    }
}